home *** CD-ROM | disk | FTP | other *** search
- ;-------------------------
- ; REBOOT.ASM ver 192.5.1beta ;-)
- ; Public domain from James Vahn, flush routines from Tim Arheit.
- ; "oh no!!" idea stolen from David Kirschbaum.
-
- cseg segment
- assume cs:cseg,ds:cseg
- org 100h
-
- Begin:
- mov cx,100d ;close everything in sight
- Close_Lup: ;Loop to close first 100 possible
- mov ah,03Eh ;open files.
- mov bx,cx
- int 21h
- loop Close_Lup
-
- mov ax,cs ;Set DS to code segment.
- mov ds,ax
- mov ax,5D01h ;Flush buffers and update directory
- mov dx,offset Params ;entries. This call may have problems
- int 21h ;under OS/2 and DR-DOS..
-
- mov ah,0Dh ;DOS flush file buffers.
- int 21h ;Most cache programs catch this call.
-
- mov ah,21h ;flush for QCASHE
- int 13h
-
- mov ah,0A1h ;flush for PC Kwik, PC-Cache v5
- mov si,4358h ;Qcache v4
- int 13h
-
- mov ax,0FFA5h ;flush for PC-Cache v6+
- mov cx,0DDDDh
- int 16h
-
- mov ax,0FE03h ;flush for Norton Utilities NCACHE
- mov di,"NU"
- mov si,"CF"
- int 2Fh
-
- mov ax,4A10h ;flush for SMARTDRV v4.00+ -API
- mov bx,0002h
- int 2Fh
-
- ;-----------------
- ; Flushed. On with the resetting..
- ;
- mov ax,40h ;Set ES to BIOS data area.
- mov es,ax
- mov word ptr es:[72h],1234h ;Remove this for cold boot.
-
- ;-----------------
- ; First attempt at a reset. If 15/4F isn't supported, hopefully
- ; no harm will come.
- ;
- mov dl,byte ptr es:[17h]
- or byte ptr es:[17h],0Ch ;Simulates CTRL-ALT-DEL
- mov ax,4F53h ;on some machines. PS/2?
- int 15h
- mov byte ptr es:[17h],dl
-
- ;-----------------
- ; Second attempt. This jumps to 'Beep' via the CMOS shutdown byte
- ; and resets via the 8042 keyboard interface chip if present.
- ;
- mov ax,cs ;Set DS to code segment.
- mov ds,ax
- mov word ptr es:[69h],ax ;Prepare BIOS for PM
- mov word ptr es:[67h],offset Beep ; style reset.
- mov al,0Fh
- out 70h,al
- call Delay
- mov al,0Ah ;Set CMOS for BIOS JMP.
- out 71h,al
- call Delay
- mov al,0FEh ;Reset via 8042
- out 64h,al
- call Delay
-
- ;------------------
- ; Failed.. No 8042! Ye olde standard reboot. If CMOS is present,
- ; this will also jump to Beep.
-
- db 0EAh,0h,0h,0FFh,0FFh ;jmp FFFF:0000
-
- ;------------------
- ; Delay routine, approx 1/18.2 seconds
- ;
- Delay:
- push ds
- mov ax,0040h
- mov ds,ax
- mov al,ds:[006Ch]
- lo1: cmp al,ds:[006Ch]
- je lo1
- pop ds
- ret
-
- ;------------------
- ; If successful, the CMOS shutdown byte will cause a jump to here,
- ; making a tone and resetting via a triple exception error.
- ;
- Beep:
- push cs
- pop ds
-
- mov ax,0E07h ; Make a Beep.
- int 10h
-
- mov al,0B6h ; Make another Beep.
- out 43h,al
- in al,61h
- or al,3h
- out 61h,al
- mov al,82h
- out 42h,al
- mov al,9h
- out 42h,al
- mov cx, 02000h
- lo2: in al,04Fh
- loop lo2
- .286p
- lidt fword ptr cs:Table ; Forces a CPU reset.
- int 0
- Table df 0
- msg db 'Oh no!!!$'
- Params db 0 ; Dynamic, 22 bytes.
-
- cseg ends
- end Begin
-
- { ---------------------- CUT -------------------------------}
-
- Cut the following to a seperate file. Name it REBOOT.XX
- Use XX3402 to decode the following if you do not have TASM to build
- the above code. The COM file will be created.
-
- example : XX3402 D reboot.xx
-
-
-
- *XX3402-000212-190296--72--85-20361------REBOOT.COM--1-OF--1
- iKE+h1u9qQoVsjWAm6vMi+3RihA-nG4o1QoVh05B2vGVjZV1nFCsdTytrRrB3fU1zfxJHft4
- Ewoji--8ik6+nGysE+0Ck0P5-b6+B-6aWVML+0O+1VQ+19VHHwoJ7cUK3k0Am6vM7eBd+0P5
- -aQ+b+4k1yNku-A+g+faQSUA+91ytaHc-E1e++1zzlusE+0Cq8-g+1c4P+-oyVz11Vys-kvB
- 290qtYDYMEk1ta4kUiN0g+baEfY+6CFDsjki1k2Sl+5B+++++++++2xc64tj6G2V7+++
- ***** END OF BLOCK 1 *****
-